<!DOCTYPE html>  
<html>
    <meta charset="utf-8" />  
    <title>栈</title>  
<body>
    <h2>栈</h2>
    <p>
        一种遵从先进后出 (LIFO) 原则的有序集合；新添加的或待删除的元素都保存在栈的末尾，称作栈顶，
        另一端为栈底。在栈里，新元素都靠近栈顶，旧元素都接近栈底。
    </p>
</body>
<script>  
    class Stack{

        constructor(){
            this.items = []
        }
        // 入栈
        push(element){
            this.items.push(element)
        }
        // 出栈
        pop(element){
            return this.items.pop(element)
        }
        // 末位
        peek(){
            return this.items[this.items.length -1]
        }
        // 是否为空栈
        get isEmpty(){
            return !this.items.length
        }
        // 尺寸
        get size(){
            return this.items.length
        }
        // 清空栈
        clear() {
            this.items = []
        }
        // 打印栈数据
        print() {
            console.log('print',this.items.toString())
        }
    }

    const stack = new Stack()

    stack.push('aa')
    stack.push('bb')
    stack.push('cc')

    
    console.log('pop',stack.pop('bb'))
    console.log('push',stack.items)
    console.log('peek',stack.peek())
    console.log('isEmpty',stack.isEmpty)
    console.log('size',stack.size)

    stack.print()
</script>  
</html>